home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 301-325 / disk_313 / uucp / uucp1.lzh / src / News060 / postnews.c < prev    next >
C/C++ Source or Header  |  1990-01-25  |  4KB  |  217 lines

  1.  
  2. /*
  3.  *  PostNews.c
  4.  *
  5.  *  Copyright 1988 by William Loftus.  All rights reserved.
  6.  *
  7.  *  Version 0.60 Beta
  8.  */
  9.  
  10. #include <time.h>
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include "log.h"
  14.  
  15. char *UserName;
  16. char *NodeName;
  17. char *RealName;
  18. char *NewsEditor;
  19. char *DomainName;
  20. char to_buf[128];
  21. char grp_buf[128];
  22. char dist_buf[128];
  23. char subject_buf[128];
  24. char *temp_file_name;
  25.  
  26. int seq;
  27.  
  28. char *NewsFeed;
  29.  
  30. char cmd[128];
  31. char path[128];
  32. char signature[121];
  33.  
  34. void read_ctl();
  35. void GetTo();
  36. void GetDist();
  37. void GetSubject();
  38. void GetMessage();
  39. void BuildRnews();
  40. void Signature();
  41. void PromptGet();
  42. char *TmpFileName();
  43. char *FindConfig();
  44.  
  45. void
  46. errormsg (msg)
  47. char *msg;
  48. {
  49.     printf(msg);
  50. }
  51.  
  52.  
  53. void
  54. main()
  55. {
  56.     temp_file_name = TmpFileName("UUSPOOL:news");
  57.  
  58.     LogProgram = "PostNews";
  59.  
  60.     UserName = FindConfig("UserName");
  61.     NodeName = FindConfig("NodeName");
  62.     NewsFeed = FindConfig("NewsFeed");
  63.     NewsEditor=FindConfig("NewsEditor");
  64.     RealName = FindConfig("RealName");
  65.     DomainName=FindConfig("DomainName");
  66.  
  67.     if (UserName == NULL || NodeName == NULL || NewsFeed == NULL ||
  68.     NewsEditor==NULL || RealName == NULL || DomainName == NULL)
  69.     {
  70.     printf("UULIB:Config incomplete, missing one or more of:\n");
  71.     printf("    UserName, NodeName, DomainName, NewsFeed, NewsEditor, RealName\n");
  72.     exit(1);
  73.     }
  74.  
  75.     GetTo();
  76.     GetDist();
  77.     GetSubject();
  78.     GetMessage();
  79.     BuildRnews();
  80. }
  81.  
  82. void
  83. GetTo()
  84. {
  85.     PromptGet("Newsgroup(s): ", 0, grp_buf, sizeof(grp_buf), stdin);
  86. }
  87.  
  88. void
  89. GetDist()
  90. {
  91.     FILE *fd;
  92.     char  buf[128];
  93.  
  94.     if (!(fd = fopen("UULIB:news.distribution", "r"))) {
  95.     errormsg("Can't Find news.distribution file");
  96.     exit(3);
  97.     }
  98.  
  99.     while (fgets(buf, sizeof buf, fd)) {
  100.     printf("%s", buf);
  101.     }
  102.  
  103.     PromptGet("Distribution: ", 0, dist_buf, sizeof(dist_buf), stdin);
  104. }
  105.  
  106. void
  107. GetSubject()
  108. {
  109.     PromptGet("Subject: ", 1, subject_buf, sizeof(subject_buf), stdin);
  110. }
  111.  
  112. void
  113. GetMessage()
  114. {
  115.     FILE *fp;
  116.     time_t t;
  117.  
  118.     seq = GetSequence(4);
  119.  
  120.     fp = fopen(temp_file_name, "w");
  121.  
  122.     if (fp) {
  123.     time(&t);
  124.     fprintf(fp,"Relay-Version: X-AmigaNEWS version 0.60 BETA; site %s%s\n", NodeName, DomainName);
  125.     fprintf(fp,"Posting-Version: X-AmigaNEWS version 0.60 BETA; site %s%s\n", NodeName, DomainName);
  126.     fprintf(fp,"Path: %s!%s\n", NodeName, UserName);
  127.     fprintf(fp,"From: %s@%s%s (%s)\n", UserName, NodeName, DomainName, RealName);
  128.     fprintf(fp,"Newsgroups: %s", grp_buf);
  129.     fprintf(fp,"Subject: %s", subject_buf);
  130.     fprintf(fp,"Message-Id: <%05d.AA%05d@%s%s>\n", seq, seq, NodeName, DomainName);
  131.     fprintf(fp,"Date: %s", ctime(&t));
  132.     fprintf(fp,"Followup-To: %s", grp_buf);
  133.     fprintf(fp,"Expires: \n");
  134.     fprintf(fp,"Keywords: \n");
  135.     fprintf(fp,"Distribution: %s\n\n", dist_buf);
  136.  
  137.     fclose(fp);
  138.     } else {
  139.     errormsg("Can't open temp file %s\n", temp_file_name);
  140.     exit(1);
  141.     }
  142.  
  143.     sprintf(cmd,"%s %s", NewsEditor, temp_file_name);
  144.     system(cmd);
  145.  
  146.     printf("Append .signature file? [y/n] ");
  147.     fgets(signature, sizeof signature, stdin);
  148.     if ((signature[0] | 0x20) != 'n') {
  149.     Signature();
  150.     printf(".signature file appended.\n");
  151.     }
  152. }
  153.  
  154. void
  155. BuildRnews()
  156. {
  157.     NewsFeed[7] = '\0';
  158.  
  159.     sprintf(cmd, "UUX %s \"%s!rnews\"", temp_file_name, NewsFeed);
  160.     system(cmd);
  161.     remove(temp_file_name);
  162. }
  163.  
  164. /*
  165.  * Read the control file and grab a few parameters.
  166.  */
  167.  
  168. void
  169. Signature()
  170. {
  171.     FILE *fp;
  172.     FILE *sf;
  173.     char buff[128];
  174.  
  175.     fp = fopen(temp_file_name, "a");  /* should already exist!! */
  176.  
  177.     if (!fp) {
  178.     errormsg("Can't open temp file--%s\n", temp_file_name);
  179.     exit(1);
  180.     }
  181.  
  182.     fprintf(fp, "\n--\n");
  183.  
  184.     sf = fopen("UULIB:.signature", "r");
  185.  
  186.     if (sf) {
  187.     while (NULL != fgets(buff, sizeof buff, sf)) {
  188.         fprintf(fp, "%s", buff);
  189.     }
  190.     fclose(sf);
  191.     } else {
  192.     errormsg("Can't open UULIB:.signature file\n");
  193.     }
  194.     fclose(fp);
  195. }
  196.  
  197. void
  198. PromptGet(prompt, loop, buf, bufsize, fin)
  199. char *prompt;
  200. char *buf;
  201. FILE *fin;
  202. {
  203.     short i;
  204.  
  205.     do {
  206.     printf("%s", prompt);
  207.     fflush(stdout);
  208.     if (fgets(buf, bufsize, fin) == NULL)
  209.         break;
  210.     for (i = 0; buf[i] == ' ' || buf[i] == 9; ++i);
  211.     if (buf[i] != '\n')
  212.         break;
  213.     } while (loop);
  214. }
  215.  
  216.  
  217.